home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #12 / Amiga Plus CD - 2002 - No. 12.iso / Tools / Development / source-highlight-1.6.1 / tests / test.php3 < prev    next >
Encoding:
Text File  |  2002-11-17  |  12.2 KB  |  331 lines

  1. <?
  2. /*
  3. CircaLib.php3 : provide function to perform search on Circa with PHP
  4. Copyright 2000 A.Barbet alian@alianwebserver.com.  All rights reserved.
  5.  
  6. Revision 1.1  2000/11/23 22:51:17  Administrateur
  7. addSite.php3
  8.  
  9. Revision 1.2  2000/10/27 16:01:12  Administrateur
  10. - Navigation par categorie
  11. - Passer le prefixe en variable globale
  12. - Passer la database en variable globale
  13.  
  14. Revision 1.1  2000/10/22 22:43:47  Administrateur
  15. Premiere version fonctionnelle. Supporte:
  16. - Requetes booleenes
  17. - Affichage par pages de 10 liens
  18.  
  19. */
  20.  
  21. /*
  22.  
  23. Fonction permettant d'effectuer une recherche par mot dans Circa
  24.  
  25. Paramètres :
  26.  
  27.  $template : Masque HTML pour le resultat de chaque lien. La liste des variables définies au
  28.  moment du eval sont : $indiceG,$titre,$description,$url,$facteur,$last_update,$langue
  29.  
  30.   Exemple de masque :
  31.  
  32.   '"<p>$indiceG - <a href=\"$url\">$titre</a> $description<br>
  33.    <font class=\"small\"><b>Url:</b> $url <b>Facteur:</b> $facteur
  34.    <b>Last update:</b> $last_update </font></p>\n"'
  35.  
  36.  $mot    : Séquence des mots recherchés tel que tapé par l'utilisateur
  37.  first   : Indice du premier site affiché dans le résultat
  38.  $id     : Id du site dans lequel effectué la recherche
  39.  $langue : Restriction par langue (facultatif)
  40.  $Url    : Restriction par url : les url trouvées commenceront par $Url (facultatif)
  41.  $create : Restriction par date inscription. Format YYYY-MM-JJ HH:MM:SS (facultatif)
  42.  $update : Restriction par date de mise à jour des pages. Format YYYY-MM-JJ HH:MM:SS (facultatif)
  43.  $catego : Restriction par categorie (facultatif)
  44.  
  45. Retourne ($resultat,$links,$indice)
  46.  
  47.  $resultat : Buffer HTML contenant la liste des sites trouves formaté en fonction
  48.              de $template et des mots present dans $mots
  49.  $links    : Liens vers les pages suivantes / precedentes
  50.  $indice   : Nombre de sites trouves
  51.  
  52. */
  53. function search($template,$word,$first,$idc,$langue,$Url,$create,$update,$categorie)
  54.          {
  55.          $mots = split( " ", strtolower($word));
  56.          $i=0;
  57.          # Recherche des requetes booleenes
  58.          while( list($key,$valeur) = each ($mots))
  59.                 {
  60.                 if    ($valeur == '+') {$ind_and[]=$i;} # Reperage de la position des mots 'and'
  61.                 else if ($valeur == '-') {$ind_not[]=$i;} # Reperage de la position des mots 'not'
  62.                 else {$mots_tmp[]=$valeur;}
  63.                 $i++;
  64.                 }
  65.          # Recherche SQL
  66.          $tab = search_word(join("','",$mots_tmp),$idc,'','','','','');
  67.          # On supprime tout ceux qui ne repondent pas aux criteres and si present
  68.          if (is_array($ind_and))
  69.              {while( list($key,$ind) = each($ind_and)) {while( list($url,$tab_url) = each ($tab))
  70.                        {if (!appartient($mots[$ind+1],$tab_url[5])) {unset($tab[$url]);}}}reset($tab);}
  71.          # On supprime tout ceux qui ne repondent pas aux criteres not si present
  72.          if (is_array($ind_not))
  73.              {while( list($key,$ind) = each($ind_not)) {while( list($url,$tab_url) = each ($tab))
  74.                        {if (appartient($mots[$ind+1],$tab_url[5])) {unset($tab[$url]);}}}reset($tab);}
  75.          $indice=0;$nbResultPerPage=10;
  76.          $lasto = $first + $nbResultPerPage;
  77.          # On met en forme le resultat
  78.          if (is_array($tab))
  79.              {
  80.              while( list($url,$tab_url) = each ($tab))
  81.                 {
  82.                 $indiceG=$indice+1;
  83.                 list($titre,$description,$facteur,$langue,$last_update,$mot)=$tab_url;
  84.  
  85.                 if (($indice>=$first)&&($indice<$lasto)) {eval($template);}
  86.                 # Constitution des liens suivants / precedents
  87.                 if (!($indice%$nbResultPerPage))
  88.                         {
  89.                         $nbPage++;
  90.                         if ($indice==$first) {$links.="$nbPage- ";}
  91.                         else {$links.='<a href="'.get_link($indice,$word,$idc).'">'.$nbPage.'</a>- '."\n";}
  92.                         }
  93.                 $indice++;
  94.                 }
  95.              }
  96.          if ($indice) {$indice="$indice sites trouves";}
  97.          else {$indice="<p>Aucun document trouvé.</p>";}
  98.          return array($resultat,$links,$indice);
  99.          }
  100.  
  101. /*
  102.  
  103. Construction de la requete SQL. Son exploitation est faite par search
  104.  
  105.  $tab    : Reference du hash où mettre le resultat
  106.  $word   : Mot recherché
  107.  $id     : Id du site dans lequel effectué la recherche
  108.  $langue : Restriction par langue (facultatif)
  109.  $Url    : Restriction par url
  110.  $create : Restriction par date inscription
  111.  $update : Restriction par date de mise à jour des pages
  112.  $catego : Restriction par categorie
  113.  
  114. Retourne le tableau avec le resultat de la recherche
  115. Le hash est constitué comme tel:
  116.  
  117.       $tab{$url}[0] : titre
  118.       $tab{$url}[1] : description
  119.       $tab{$url}[2] : facteur
  120.       $tab{$url}[3] : langue
  121.       $tab{$url}[4] : date de dernière modification
  122.    @{$$tab{$url}[5]}: liste des mots trouves pour cet url
  123.  
  124. */
  125. function search_word($word,$idc,$langue,$Url,$create,$update,$categorie)
  126.          {
  127.          global $prefix;
  128.          global $database;
  129.          if ($langue) {$langue=" and langue='$langue' ";} else {$langue= ' ';}
  130.          if (($Url)&&($Url != 'http://')) {$Url=" and url like '$Url%' ";}          else {$Url=' ';}
  131.          if ($create) {$create="and unix_timestamp('$create')< unix_timestamp(last_check) ";}  else {$create=' ';}
  132.          if ($update) {$update="and unix_timestamp('$update')< unix_timestamp(last_update) ";} else {$update=' ';}
  133.          if ($categorie) {}
  134.          else {$categorie=' ';}
  135.          $requete = "
  136.                 select facteur,url,titre,description,langue,last_update,mot
  137.                 from   ".$prefix.$idc."links l,".$prefix.$idc."relation r
  138.                 where  r.id_site=l.id
  139.                 and    r.mot in ('$word')
  140.                 $langue $Url $create $update $categorie
  141.                 order  by facteur desc";
  142.          $result = mysql_db_query($database,$requete);
  143.          if (!$result) {print "$requete";return ;}
  144.          $RowCount = MySQL_NUMROWS($result);
  145.          while ($i<$RowCount)
  146.                 {
  147.                 list ($facteur,$url,$titre,$description,$langue,$last_update,$mot)= mysql_fetch_row($result);
  148.                 $tab[$url][0] = $titre;
  149.                 $tab[$url][1]=$description;
  150.                 $tab[$url][2]+=$facteur;
  151.                 $tab[$url][3]=$langue;
  152.                 $tab[$url][4]=$last_update;
  153.                 $tab[$url][5][]=$mot;
  154.                 $i++;
  155.                 }
  156.          return $tab;
  157.          }
  158.  
  159. /*
  160.  
  161. Fonction retournant la liste des categories de la categorie $id dans le site $idr
  162.  
  163.  $id       : Id de la categorie de depart. Si undef, 0 est utilisé (Considéré comme le "Home")
  164.  $idr           : Id du responsable
  165.  $template : Masque HTML pour le resultat de chaque lien. Si undef, le masque par defaut
  166.              (defini en haut de ce module) sera utlise
  167.  
  168. Retourne ($resultat,$nom_categorie) :
  169.  
  170.  $resultat : Buffer contenant la liste des sites formatées en ft de $template
  171.  $nom_categorie : Nom court de la categorie
  172.  
  173. */
  174.  
  175. function categories_in_categorie($id,$idr,$template)
  176.          {
  177.          global $database;
  178.          global $prefix;
  179.          if (!$idr) {$idr=1;}
  180.          if (!$id) {$id=0;}
  181.          $requete = "select id,nom,parent from ".$prefix.$idr."categorie";
  182.          $result = mysql_db_query($database,$requete);
  183.          $RowCount = MySQL_NUMROWS($result);
  184.          $i=0;
  185.          while ($i<$RowCount)
  186.                 {
  187.                 list ($idc,$nom,$parent)= mysql_fetch_row($result);
  188.                 $tab[$idc][0]=$nom;
  189.                 $tab[$idc][1]=$parent;
  190.                 $i++;
  191.                 }
  192.         while( list($key,$val) = each ($tab))
  193.                 {
  194.                 $nom=$tab[$key][0];
  195.                 $parent=$tab[$key][1];
  196.                 $nom_complet="<a href=\"".getenv('SCRIPT_NAME')."?browse=1&id=$idr\">Accueil</a>".getParent($key,$idr,$tab);
  197.                 $links = get_link_categorie($key,$idr);
  198.                 if ($parent==$id) {eval($template);}
  199.                 }
  200.         if ($i==0) {$resultat="<p>Plus de catégorie</p>";}
  201.         if ($id!=0) {$titre = "<a href=\"".getenv('SCRIPT_NAME')."?browse=1&id=$idr\">Accueil</a> ".getParent($id,$idr,$tab);}
  202.         else {$titre=" ";}
  203.         return array($resultat,$titre);
  204.         }
  205.  
  206. /*
  207.  
  208. Fonction retournant la liste des pages de la categorie $id dans le site $idr
  209.  
  210.  $id       : Id de la categorie de depart. Si undef, 0 est utilisé (Considéré comme le "Home")
  211.  $idr           : Id du responsable
  212.  $template : Masque HTML pour le resultat de chaque lien. Si undef, le masque par defaut
  213.              (defini en haut de ce module) sera utlise
  214.  
  215. Retourne le buffer contenant la liste des sites formatées en ft de $template
  216.  
  217. */
  218.  
  219. function sites_in_categorie($id,$idr,$template)
  220.          {
  221.          global $database;
  222.          global $prefix;
  223.          $indiceG=1;$facteur=100;
  224.          if (!$idr) {$idr=1;}
  225.          if (!$id) {$id=0;}
  226.          $i=0;
  227.          $requete = "select url,titre,description,langue,last_update from ".$prefix.$idr."links where categorie=$id and browse_categorie='1' and parse='1'";
  228.          $result = mysql_db_query($database,$requete);
  229.          $RowCount = MySQL_NUMROWS($result);
  230.          while ($i<$RowCount)
  231.                 {
  232.                 list ($url,$titre,$description,$langue,$last_update)= mysql_fetch_row($result);
  233.                 eval($template);
  234.                 $indiceG++;$i++;
  235.                 }
  236.         if ($i==0) {$resultat="<p>Pas de pages dans cette catégorie</p>";}
  237.         return $resultat;
  238.         }
  239.  
  240. /*
  241.  
  242. Rend la chaine correspondante à la catégorie $id avec ses rubriques parentes
  243.  
  244. */
  245.  
  246. function getParent($id,$idr,$tab)
  247.         {
  248.         if (($tab[$id][1]!=0)&&($tab[$id][0])) {$parent = getParent($tab[$id][1],$idr,$tab);}
  249.         if (!$tab[$id][0]) {$tab[$id][0]='Home';}
  250.         $parent.="><a href=\"".get_link_categorie($id,$idr).'">'.$tab[$id][0]."</a>";
  251.         return $parent;
  252.         }
  253. function getWLParent($id,$idr,$tab)
  254.         {
  255.         if (($tab[$id][1]!=0)&&($tab[$id][0])) {$parent = getWLParent($tab[$id][1],$idr,$tab);}
  256.         if (!$tab[$id][0]) {$tab[$id][0]='Home';}
  257.         $parent.=">".$tab[$id][0];
  258.         return $parent;
  259.         }
  260. /*
  261.  
  262. Retourne 1 si $var appartient à $liste, 0 sinon.
  263.  
  264. */
  265. function appartient($var,$liste)
  266.          {
  267.          while( list($key,$val) = each ($liste)) {if ($val==$var) {return 1;}}
  268.          return 0;
  269.          }
  270. /**
  271.  * Retourne l'URL correspondant à la page no $no_page dans la recherche en cours
  272.  */
  273. function get_link($no_page,$word,$id)
  274.          {
  275.          $buf = getenv('SCRIPT_NAME')."?word=".urlencode($word)."&id=".$id."&first=".$no_page;
  276.          if ($nbResultPerPage) {$buf.="&nbResultPerPage=".$nbResultPerPage;}
  277.          return $buf;
  278.          }
  279. /**
  280.  * Retourne l'URL correspondant à la categorie no $no_categorie
  281.  */
  282. function get_link_categorie($no_categorie,$id) {return getenv('SCRIPT_NAME')."?categorie=$no_categorie&id=$id";}
  283.  
  284. /**
  285.  * Retourne le nom du site dans la table responsable correspondant à l'id $id
  286.  */
  287.  
  288. function get_name_site($id,$prefix)
  289.         {
  290.         #$result = mysql_db_query("circa","select titre from ".$this->{PREFIX_TABLE}."responsable where id=$id");
  291.         #$sth->execute() || print "Erreur: $DBI::errstr\n";
  292.         #my ($titre)=$sth->fetchrow_array;
  293.         #$sth->finish;
  294.         return $titre;
  295.         }
  296.  
  297. function get_liste_categorie($idr)
  298.          {
  299.          global $database;
  300.          global $prefix;
  301.          $requete = "select id,nom,parent from ".$prefix.$idr."categorie";
  302.          $result = mysql_db_query($database,$requete);
  303.          $RowCount = MySQL_NUMROWS($result);
  304.          $i=0;
  305.          while ($i<$RowCount)
  306.                 {
  307.                 list ($idc,$nom,$parent)= mysql_fetch_row($result);
  308.                 $tab[$idc][0]=$nom;
  309.                 $tab[$idc][1]=$parent;
  310.                 $i++;
  311.                 }
  312.         while( list($key,$val) = each ($tab))
  313.                 {
  314.                 $nom=$tab[$key][0];
  315.                 $parent=$tab[$key][1];
  316.                 $buf.="<option value=\"$key\">".getWLParent($key,$idr,$tab)."</option>";
  317.                 }
  318.         return $buf;
  319.         }
  320.  
  321. function addSite($url,$categorie)
  322.          {
  323.          global $database;
  324.          global $prefix;
  325.          global $idr;
  326.          $requete="insert into ".$prefix.$idr."links (url,titre,description,langue,valide,categorie,browse_categorie)
  327.                    values ('$url',' ',' ','fr',0,$categorie,'1')";
  328.          $result = mysql_db_query($database,$requete);
  329.          }
  330. ?>
  331.